﻿using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using EntLib = Microsoft.Practices.EnterpriseLibrary.Logging;

namespace CPN.PJN.Common.Logging.LogWriters
{
    /// <summary>
    /// Cette classe représente une implémentation des logs pour les Enterprises Library
    /// Logging Application Block
    /// </summary>
    public class EnterpriseLibraryLogWriter : ILogWriter
    {
        /// <summary>
        /// Cette méthode configure le Logger à utiliser
        /// </summary>
        /// <param name="parameters">Liste des paramétres de configuration</param>
        public void Configure(params string[] parameters)
        {
            // Aucune configuration en dur pour le Logging Application Block
        }

        /// <summary>
        /// Cette méthode écrit le message de log
        /// </summary>
        /// <param name="message">Message de log</param>
        public void Write(object message)
        {
            EntLib.Logger.Write(message);
        }

        /// <summary>
        /// Cette méthode écrit le message de log dans une catégorie précise
        /// </summary>
        /// <param name="message">Message de log</param>
        /// <param name="category">Catégorie de log</param>
        public void Write(object message, string category)
        {
            EntLib.Logger.Write(message, category);
        }

        /// <summary>
        /// Cette méthode écrit le message de log dans une catégorie précise et sa severité
        /// </summary>
        /// <param name="message">Message de log</param>
        /// <param name="category">Catégorie de log</param>
        /// <param name="severity">severité</param>
        public void Write(object message, string category, int severity)
        {
            if (Enum.IsDefined(typeof(TraceEventType), severity))
            {
                var traceEventType = (TraceEventType)severity;
                var categories = new Collection<string>();
                categories.Add(category);
                EntLib.Logger.Write(message, categories, severity, 100, traceEventType);
            }
        }
    }
}
